package com.spring.pool;

import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

//@Scope("prototype")   //每次获取对象都是一个新的实例，此实例不会存储到Bean池中。
@Scope("singleton") //默认作用域为singleton，单例作用域
@Lazy //定义对象延迟加载(类会读到内存，但是会延迟对象的创建)
@Component
public class ObjectPool {//假设这个类是一个对象池

    public ObjectPool(){
        System.out.println("ObjectPool()");
    }

    /**
     *  @PostConstruct 注解用于描述Bean对象的生命周期初始化方法
     *  这样的方法何时执行?Bean对象创建以后。
     *  这样的方法用于做什么？对对象内容进行初始化。假如这是个池对象，可以在对象创建
     *  后，在池中先放一些资源。
     */
    @PostConstruct
    public void init(){
        System.out.println("init()");
    }
    /**
     *   @PreDestroy 注解用于描述bean对象生命周期销毁方法
     *   这样的方法何时执行?对象销毁之前执行
     *   这样的方法用于做什么？一般用于释放资源。假如这是个池对象，池对象在销毁之前
     *   可以将池中的资源先移除。
     */
    @PreDestroy
    public void destroy(){
        System.out.println("destroy()");
    }

}
